# 创建一个列表
list1 = []
print(list1)
list1 = [1, 2, "123", True, 2.0]
print(list1)

list1 = list([1, 2, "123", True, 2.0])
print(list1)
list1 = list("1bcd3")  # 字符串转成一个列表
print(list1)

# 列表的索引
list1 = [1, 2, "123", True, 2.0]
print("索引从0开始", list1[2])

# 列表的切片操作
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print("从索引为2开始获取，一直取到索引为（8-1），每隔3个取一个", list1[2:8:3])

# 列表的加法
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9]
print('列表的加法为对列表的元素进行合并操作', list1 + list2)

# 列表的乘法
print('列表的乘法 元素进行复制多份', list1 * 3)

# 判断某个元素是否在列表中
print('判断某个元素是否在列表中', 1 in list1, 'a' not in list1)

# 获取列表的长度
print("获取列表的长度", len(list1))

# 删除变量
# del list1
# print(list1)

# 列表的遍历
for item in list1:
    print("列表的遍历", item)
for index, item in enumerate(list1):
    print("列表的遍历 索引为：", index, "对应的元素为:", item)

# 列表的增删改查
list3 = [1, 2, 3, 4, 5]
list3.insert(2, 10) # 在列表指定的位置追加元素
list3.append("列表末尾追加一个元素")
list3.extend(["列表末尾追加一组元素", 4, 5])
print(list3)
print("查找列表中的某个元素的索引,查找的元素不存在会报错", list3.index(4))
list3.pop(2)  # 根据索引删除元素
if 4 in list3:
    list3.remove(4)  # 根据值删除元素，多个只删除第一个. 需要删除的值必须在列表中
print(list3)


print("range(5)", list(range(5)))

# 列表推导式

# 这行代码使用列表推导式，从 range(10) 中筛选出偶数 i（条件是 i % 2 == 0），
# 然后把每个筛出来的 i 乘以 2 作为列表的元素，最终赋值给变量 list5。具体来说，
# range(10) 产生 0 到 9，经过条件过滤后留下 0、2、4、6、8，乘 2 后
# 得到 [0, 4, 8, 12, 16]。
list5 = [i * 2 for i in range(10) if i % 2 == 0]
print("list5", list5)

# 包含多个循环的列表推导式
list1 = [1, 2, 3, 4, 5, 6]
list2 = ["a", "b", "c", "d", "e"]
tuple_list = [(i, j) for i in list1 for j in list2]
print(tuple_list)


# zip 拉链函数
listA = ['a', 'b', 'c', 'd']
listB = [1, 2, 3]
zipped = zip(listA, listB)
print("zip 拉链函数", list(zipped))  # [('a', 1), ('b', 2), ('c', 3)]

print(f"zip 获取的值只可以遍历一次，若想多次使用，需要转换成列表或其他可存储数据的类型，比如：{list(zip(listA, listB))}")
